package com.study.easyexcel.business.service;

import com.study.easyexcel.common.exception.ExcelImportException;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;

/**
 * @author yuhuan
 * @date 2023/5/8
 */
public interface WorkService {

    /**
     * 导出{@link Object}到表格
     *
     * @param response 导出到浏览器
     */
    void exportExcel(HttpServletResponse response);

    /**
     * 导出{@link Object}模板
     *
     * @param response 导出到浏览器
     */
    void exportTemplate(HttpServletResponse response);

    /**
     * 导出{@link List}到表格，复杂表头（多行表头）；按照时间轴生成表头
     *
     * @param response  导出到浏览器
     * @param startTime 开始时间
     * @param endTime   结束时间
     */
    void exportDayAxis(HttpServletResponse response, Date startTime, Date endTime);

    /**
     * 导出{@link List}模板，简单表头（1行表头）
     *
     * @param response 导出到浏览器
     */
    void variableTemplate(HttpServletResponse response);

    /**
     * 分身式填充模板并导出到表格
     *
     * @param response 导出到浏览器
     */
    void shareFillExport(HttpServletResponse response);

    /**
     * 组合式填充模板并导出到表格
     *
     * @param response 导出到浏览器
     */
    void mergeFillExport(HttpServletResponse response);

    /**
     * 合成数据，解决无法填充嵌套式列表的问题；本接口将嵌套列表通过代码合成一条列表
     */
    void syntheticFillExport(HttpServletResponse response);

    /**
     * 从表格导入到{@link Object}
     *
     * @param file 导入的Excel文件
     * @throws ExcelImportException 数据导入出错
     */
    void importExcel(MultipartFile file) throws ExcelImportException;

    /**
     * 从表格导入到{@link List}
     *
     * @param file 导入的Excel文件
     * @throws ExcelImportException 数据导入出错
     */
    void variableImport(MultipartFile file) throws ExcelImportException;

    /**
     * 从本地表格导入到{@link Object}
     *
     * @throws ExcelImportException 数据导入出错
     */
    void importLocalExcel() throws ExcelImportException;
}
